package leetCode;

import java.util.HashMap;
import java.util.Map;

/**
 * 904. 水果成篮
 * https://leetcode.cn/problems/fruit-into-baskets/description/
 */
class Solution1 {
    public int totalFruit(int[] fruits) {
        int n = fruits.length;
        Map<Integer, Integer> map = new HashMap<>();//篮子种类，篮子的数量
        int len = 0;//水果的数量
        for(int left = 0, right = 0; right < n; right++) {
//            //进窗口
//            if(!map.containsKey(fruits[right])) {
//                map.put(fruits[right], 1);
//            } else {
//                //篮子已经有该种类型的水果了，数量+1
//                int x = map.get(fruits[right]);//篮子中该种类型的数量
//                map.put(fruits[right], x + 1);
//            }
            //进窗口(优化版）
            int in = fruits[right];
            map.put(in, map.getOrDefault(in, 0) + 1);
            //判断
            while(map.size() > 2) {
                //出窗口
                int fruit = fruits[left];
                int x = map.get(fruit);//该水果的数量
                map.put(fruit, x - 1);
                left++;
                //判断前面水果数量减没减到0，也就是篮子丢没丢完前一个水果
                if(map.get(fruit) == 0) {
                    //hashmap要移除这个水果
                    map.remove(fruit);
                }
            }
            //更新结果
            len = Math.max(len, right - left + 1);
        }
        return len;
    }
}